﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.Common;
using System.Data.SqlTypes;
using System.ComponentModel;

namespace BibliotecaClases
{
    class CADEmpleado
    {
        string cadena = SingletonCadenaConexion.Instancia.Cadena;
        SqlConnection conexion;
        DataSet ds;
        SqlDataAdapter da;
        
        public CADEmpleado()
        {
        }

        public DataSet ObtenerTablaProvincias()
        {
            try
            {
                conexion = new SqlConnection(cadena);
                da = new SqlDataAdapter("select provincia, idProvincia from Provincias order by idProvincia", conexion);
                ds = new DataSet();
                da.Fill(ds, "provincias");
                return ds;
            }
            catch (Exception ex)
            {
                //ex.Message;
                return null;
            }
        }

        public DataSet ObtenerTablaLocalidades(string id)
        {
            try
            {
                conexion = new SqlConnection(cadena);
                da = new SqlDataAdapter("select localidad, idLocalidad from Localidades where provincia = " + id + " order by idLocalidad", conexion);
                ds = new DataSet();
                da.Fill(ds, "localidades");
                return ds;
            }
            catch (Exception ex)
            {
                //ex.Message;
                return null;
            }
        }
       
        public string InsertarEmpleado(ENEmpleado empleado)
        {
            string retorno = "";
            try
            {
                conexion = new SqlConnection(cadena);
                da = new SqlDataAdapter("select * from Empleados", conexion);
                ds = new DataSet();
                da.Fill(ds, "Empleados");
                DataTable t = new DataTable();
                t = ds.Tables["Empleados"];
                DataRow nuevafila = t.NewRow();
                nuevafila[1] = empleado.Dni;
                nuevafila[2] = empleado.Nombre;
                nuevafila[3] = empleado.Apellidos;
                nuevafila[4] = empleado.Fnacimiento;
                nuevafila[5] = empleado.Tipo;
                nuevafila[6] = empleado.Telefono;
                nuevafila[7] = empleado.Direccion;
                nuevafila[8] = empleado.Cpostal;
                nuevafila[9] = empleado.Provincia;
                nuevafila[10] = empleado.Localidad;
                nuevafila[11] = empleado.Email;
                nuevafila[12] = empleado.Login;
                nuevafila[13] = empleado.Password;
                nuevafila[14] = empleado.Foto;
                nuevafila[15] = 1;

                t.Rows.Add(nuevafila);
                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                if (da.Update(ds, "Empleados") == 0) //si el nº d filas actualizadas correctamente no es 0
                    retorno = "ERROR al insertar";
            }
            catch (SqlException sqlEx)
            {
                return "ERROR relacionado con la base de datos.\nDetalles:\n" + sqlEx.Message;
            }
            catch (Exception ex)
            {
                return "ERROR al intentar insertar un empleado.\nDetalles:\n" + ex.Message;
            }
            return retorno;
        }

        public DataSet ObtenerTablaEmpleados(ref string m)
        {
            try
            {
                conexion = new SqlConnection(cadena);
                da = new SqlDataAdapter("select * from Empleados where visible = 1", conexion);
                ds = new DataSet();
                da.Fill(ds, "empleados");
                return ds;
            }
            catch (Exception ex)
            {
                m = ex.Message;
                return null;
            }
        }

        public DataSet BuscarEmpleado(string dni, string nombre, string apellidos, string tipo, 
           string provincia, string localidad, string login)
        {
            string consulta = "select * from Empleados ";
            string aux = "";
            if (dni != "")
            {
                consulta += "where dni ='" + dni + "'";
                aux = " and ";
            }
            if (nombre != "")
            {
                if (aux == "")
                    aux = " where";
                consulta += aux + " nombre like '" + nombre + "%'";
            }
            if (apellidos != "")
            {
                if (aux == "")
                    aux = " where";
                else
                    aux = " and";
                consulta += aux + " apellidos like '" + apellidos + "%'";
            }
            if (tipo != "")
            {
                if (aux == "")
                    aux = " where";
                else
                    aux = " and";
                consulta += aux + " tipo like '" + tipo + "%'";
            }
            if (provincia != "")
            {
                if (aux == "")
                    aux = " where";
                else
                    aux = " and";
                consulta += aux + " provincia like '" + provincia + "%'";
            }
            if (localidad != "")
            {
                if (aux == "")
                    aux = " where";
                else
                    aux = " and";
                consulta += aux + " localidad like '" + localidad + "%'";
            }
            if (login != "")
            {
                if (aux == "")
                    aux = " where";
                else
                    aux = " and";
                consulta += aux + " login='" + login + "'";
            }
            try
            {
                conexion = new SqlConnection(cadena);
                da = new SqlDataAdapter(consulta, conexion);
                ds = new DataSet();
                da.Fill(ds, "Empleados");
                return ds;
            }
            catch (Exception)
            {
                return null;
            }
        }

        public string ModificarEmpleado(string dni, string nombre, string apellidos, string fnacimiento,
            string tipo, string telefono, string direccion, string cpostal, string provincia, string localidad, 
            string email, string login, string password, string foto)
        {
            string retorno = "";
            try
            {
                conexion = new SqlConnection(cadena);
                da = new SqlDataAdapter("select * from Empleados where dni='" + dni + "' and visible = 1", conexion);
                ds = new DataSet();
                da.Fill(ds, "empleados");
                ds.Tables["empleados"].Rows[0][1] = dni;
                ds.Tables["empleados"].Rows[0][2] = nombre;
                ds.Tables["empleados"].Rows[0][3] = apellidos;
                ds.Tables["empleados"].Rows[0][4] = fnacimiento;
                ds.Tables["empleados"].Rows[0][5] = tipo;
                ds.Tables["empleados"].Rows[0][6] = telefono;
                ds.Tables["empleados"].Rows[0][7] = direccion;
                ds.Tables["empleados"].Rows[0][8] = cpostal;
                ds.Tables["empleados"].Rows[0][9] = provincia;
                ds.Tables["empleados"].Rows[0][10] = localidad;
                ds.Tables["empleados"].Rows[0][11] = email;
                ds.Tables["empleados"].Rows[0][12] = login;
                ds.Tables["empleados"].Rows[0][13] = password;
                ds.Tables["empleados"].Rows[0][14] = foto;


                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                if (da.Update(ds, "empleados") == 0) //si no se ha actualizado ninguna fila
                    retorno = "ERROR al modificar el empleado con DNI: " + dni;

                return retorno;
            }
            catch (SqlException sqlEx)
            {
                return "ERROR relacionado con la base de datos.DNI del empleado: " + dni + ".\nDetalles:\n" + sqlEx.Message;
            }
            catch (Exception ex)
            {
                return "ERROR al modificar el empleado con DNI: " + dni + ".\nDetalles:\n" + ex.Message;
            }
        }

        public string EliminarEmpleado(string dni)
        {
            string retorno = "";
            try
            {
                conexion = new SqlConnection(cadena);
                da = new SqlDataAdapter("select * from Empleados where dni = '" + dni + "' and visible = 1", conexion);
                ds = new DataSet();
                da.Fill(ds, "Empleados");
                ds.Tables["Empleados"].Rows[0][15] = 0;
                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                if (da.Update(ds, "Empleados") == 0) //si no se ha actualizado ninguna fila
                    retorno = "ERROR al modificar el empleado con DNI: " + dni;

                return retorno;
            }
            catch (SqlException sqlEx)
            {
                return "ERROR relacionado con la base de datos.DNI del empleado: " + dni + ".\nDetalles:\n" + sqlEx.Message;
            }
            catch (Exception ex)
            {
                return "ERROR al modificar el empleado con DNI: " + dni + ".\nDetalles:\n" + ex.Message;
            }
        }

        public bool ComprobarLoginLibre(string log)
        {
            bool resultado = false;
            try
            {
                conexion = new SqlConnection(cadena);
                da = new SqlDataAdapter("select login from Provincias where login = " + log, conexion);
                ds = new DataSet();
                da.Fill(ds, "provincias");
                if (ds.Tables[0].Rows.Count > 0)
                    resultado = false;
                else
                    resultado = true;

                return resultado;
            }
            catch (Exception ex)
            {
                //ex.Message;
                return false;
            }
        }

        public bool ExisteElEmpleado(string empleado)
        {
            conexion = new SqlConnection(cadena);
            da = new SqlDataAdapter("select dni, visible from Empleados where dni = '" + empleado + "' and visible = 1", conexion);
            ds = new DataSet();
            da.Fill(ds, "Empleados");
            DataTable dt = ds.Tables["Empleados"];
            return (dt.Rows.Count > 0);
        }

    }
}
